#ifndef Game_h__
#define Game_h__

class infSys;
class FileSystem;
class DeclManager;
class Common;
class CVarSystem;
class CmdSystem;
class RenderSystem;

class Game {
public:
    virtual ~Game() {}

    virtual void    Init() = 0;
    virtual void    Shutdown() = 0;
            bool    IsInitiazlied() const { return initiazlied; }

    virtual void    RunGame() = 0;
protected:
    bool            initiazlied;
};

class GameEdit {
public:
    virtual ~GameEdit() {}

    virtual void    Init() = 0;
    virtual void    Shutdown() = 0;
    bool    IsInitiazlied() const { return initiazlied; }

private:
    bool            initiazlied;
};

typedef struct {
    Game*       game;
    GameEdit*   gameEdit;
} gameExport_t;


typedef struct {
    infSys*         sys;
    FileSystem*     fileSystem;
    DeclManager*    declManager;
    Common*         common;
    CVarSystem*     cvarSystem;
    CmdSystem*      cmdSystem;
    RenderSystem*   renderSystem;

} gameImport_t;

extern "C" {
    typedef gameExport_t*   (*GetGameAPI_t)(gameImport_t* gameImport);
};

extern GetGameAPI_t GetGameAPI;

#endif // Game_h__